#ifndef ADMINISTRADORDENIVELES_H_
#define ADMINISTRADORDENIVELES_H_

/*
 * Clase que se encarga de administrar el archivo niveles, que contiene
 * informacion de los distintod niveles presentes en el sistema.
 * Debe ser usada para habilitar niveles existentes, agregar niveles nuevos
 * e instanciar Nivel.
 */

#include <list>
#include <string>
#include "../modelo/Nivel.h"
#include "Constantes.h"

using namespace std;
class AdministradorDeNiveles {
private:
	list<string> nivelesLocales;
	void parsearLinea(string linea, string &nivel, string &arch, string &estado);
	bool verificarArchivo(string archivo);
	string getLineaNivel(string nivel);
	int buscarPosEstadoNivel(string nivel);
	
public:
	AdministradorDeNiveles();
	virtual ~AdministradorDeNiveles();
	
	/* Devuelve lista de niveles habilitados en el sistema */
	list<string> nivelesHabilitados();
	
	/* Habilita el nivel con id nivel (recibe string) */
	void habilitarNivel(string nivel);
	
	/* Habilita el nivel con id nivel (recibe short) */
	void habilitarNivel(short nivel);
	
	/* Verifica si el nivel con id nivel esta habilitado.
	 * Retorna true si esta habilitad; false en caso contrario.
	 * Parametro string
	 */
	bool nivelHabilitado(string nivel);

	/* Verifica si el nivel con id nivel esta habilitado.
	 * Retorna true si esta habilitad; false en caso contrario.
	 * Parametro short
	 */
	bool nivelHabilitado(short nivel);
	
	/* Agrega un nivel al archivo de niveles. 
	 * Recibe el id del nivel, el archivo de configuracion, y el estado inicial
	 * No chequea existencia del archivo de configuracion.
	 */
	void agregarNivel(string codigo, string archivo, string estado);
	
	/* Instancia y retorna un nuevo nivel, a partir del id de nivel.
	 * Nivel debe existir en el archivo de niveles
	 * Recibe id nivel en formato string
	 */
	Nivel* instanciarNivel(string nivel, short cantidadDeJugadores);	

	/* Instancia y retorna un nuevo nivel, a partir del id de nivel.
	 * Nivel debe existir en el archivo de niveles
	 * Recibe id nivel en formato short
	 */
	Nivel* instanciarNivel(int nivel, short cantidadDeJugadores);
	
};

#endif
